function addAge6(value: number) {
  /* 接收参数后 返回真正的装饰器函数 */
  return function xx(target: Function) {
    target.prototype.age = value
  }
}

function a(
  target: any,//PersonIII 的原型
  propertyKey: string,//sayHello
  descriptor: PropertyDescriptor // PersonIII.prototype.sayHello 的描述符
) {
  console.log("a called");

}

function b(
  target: any,//PersonIII 的原型
  propertyKey: string,//sayHello
  descriptor: PropertyDescriptor // PersonIII.prototype.sayHello 的描述符
) {
  console.log("b called");
}

function c() {
  console.log("c called");

  /* 接收参数后 返回真正的装饰器函数 */
  return function innerc(
    target: any,//PersonIII 的原型
    propertyKey: string,//sayHello
    descriptor: PropertyDescriptor // PersonIII.prototype.sayHello 的描述符
  ) {
    console.log("innerc called");
  }
}

function d() {
  console.log("d called");

  /* 接收参数后 返回真正的装饰器函数 */
  return function innerd(
    target: any,//PersonIII 的原型
    propertyKey: string,//sayHello
    descriptor: PropertyDescriptor // PersonIII.prototype.sayHello 的描述符
  ) {
    console.log("innerd called");
  }
}


@addAge6(80)
class PersonVI {

  name: string;
  age: number;

  constructor(name) {
    this.name = name
  }

  /* b => a */
  // @a
  // @b
  sayHello(who: any) {
    console.log("hello", who);
  }

  /* c - d - innderd - innerc */
  @c()
  @d()
  sayHi(who: any) {
    console.log("hi", who);
  }

}

const p60 = new PersonVI("yellow")
console.log(p60.age);
